package model; import java.util.Date; import java.util.Random; import utilities.Constants; import view.QueuePanel; public class ClientGenerator implements Runnable{ private QueuesManager queuesManager; private long arrivalTime; int countArrivalTime = 0; private long minArrivalTime, maxArrivalTime; private long minServiceTime, maxServiceTime; private Random randGenerator; static int nrOfClients =0; static int counter = 0; public ClientGenerator(long minServiceTime, long maxServiceTime, long minArrivalTime, long maxArrivalTime, long arrivalTime, QueuesManager queuesManager){ this.randGenerator = new Random(); this.minServiceTime = minServiceTime; this.maxServiceTime = maxServiceTime; this.minArrivalTime = minArrivalTime; this.maxArrivalTime = maxArrivalTime; this.arrivalTime = arrivalTime; this.queuesManager = queuesManager; this.nrOfClients ++; Thread clientGen = new Thread(this); clientGen.start(); } public void generateClient() throws InterruptedException { String firstName, lastName; long serviceTime; Thread.sleep(arrivalTime *100); if (queuesManager.isOpen()) { //System.out.println("CURRENT THREAD: " +Thread.currentThread().getName()); Date d = new Date(System.currentTimeMillis()); while(countArrivalTime < arrivalTime){ ++countArrivalTime; } if (countArrivalTime == arrivalTime) { System.out.println("hereClientGenerator"); firstName = generateFirstName(); lastName = generateLastName(); serviceTime = minServiceTime + ((long) (randGenerator.nextDouble() * (maxServiceTime - minServiceTime + 1))); //++nrOfClients; System.out.println("NRCLIENTS:" + nrOfClients); Client client = new Client(this.nrOfClients, firstName, lastName, arrivalTime, serviceTime); queuesManager.placeClientAtAQueue(client); System.out.println(d.getHours() +":"+d.getMinutes()+":"+d.getSeconds() +" "+ client); arrivalTime = minArrivalTime + ((long) (randGenerator.nextDouble() * (maxArrivalTime - minArrivalTime + 1))); this.countArrivalTime = 0; counter++; if(counter > 15){ queuesManager.blockQueue1(); } new ClientGenerator(this.getMinServiceTime(), this.getMaxServiceTime(), this.getMinArrivalTime(), this.getMaxArrivalTime(),arrivalTime ,this.queuesManager); } } else { countArrivalTime = 0; nrOfClients = 0; } } public String generateFirstName() { int index = randGenerator.nextInt(Constants.FIRST_NAME.length); return Constants.FIRST_NAME[index]; } public String generateLastName() { int index = randGenerator.nextInt(Constants.LAST_NAME.length); return Constants.LAST_NAME[index]; } public long getArrivalTime() { return arrivalTime; } public void setArrivalTime(long arrivalTime) { this.arrivalTime = arrivalTime; } public long getMinArrivalTime() { return minArrivalTime; } public void setMinArrivalTime(long minArrivalTime) { this.minArrivalTime = minArrivalTime; } public long getMaxArrivalTime() { return maxArrivalTime; } public void setMaxArrivalTime(long maxArrivalTime) { this.maxArrivalTime = maxArrivalTime; } public long getMaxServiceTime() { return maxServiceTime; } public void setMaxServiceTime(long maxServiceTime) { this.maxServiceTime = maxServiceTime; } public long getMinServiceTime() { return minServiceTime; } public void setMinServiceTime(long minServiceTime) { this.minServiceTime = minServiceTime; } public Random getRandGenerator() { return randGenerator; } public void setRandGenerator(Random randGenerator) { this.randGenerator = randGenerator; } public int getNrOfClients() { return nrOfClients; } public void setNrOfClients(int nrOfClients) { this.nrOfClients = nrOfClients; } @Override public void run() { // TODO Auto-generated method stub try { this.generateClient(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }